بسم الله الرحمن الرحيم
![]() |
|
#1
| |||
| |||
|
السلام عليكم ورحمة الله وبركاته ....
نحتاج في كثير من الاحيان الى جعل برامجنا تتعامل مع نوع معين من الملفات كما هو الحال مع معظم البرامج المتخصصة فمثلاً الورد يفتح ملفات النوع Doc و الرسام ملفات bmp وهكذا .... وما نسعى اليه هنا هو كيفية انشاء نوع خاص ببرامجنا وسوف نناقش معاً آلية العمل الذي يقوم به نظام التشغيل لفتح ملف بواسطة برنامج معين ثم سوف اقدم بعد ذلك اجراء بسيط يقوم باضافة نوع جديد من الملفات الى نظام بحيث لايتجاوز الامر سطراً واحداً في برنامجك !! .... اولاً كوننا مبرمجون يجعلنا لا نكتفي بمعرفة الكود اللازم لتسجيل نوع جديد (وهو موجود بكثرة في منتدانا) ولكن يتوجب علينا فهم طبيعة ما يحدث عندما يقوم المستخدم بالنقر المزدوج على احد الملفات الى ان يتم فتح الملف بواسطة البرنامج المحدد والطريقة في الواقع بسيطة حيث انك اذا نقرت على احد ملفات الورد (ذات الامتداد doc) فانه اولاً يقوم نظام التشغيل بالبحث في الريجيستري عن لاحقة الملف الذي ثم النقر عليه ويكون البحث منصباً على المفتاح الاساسي HKEY_CLSSSES_ROOT وذلك بالبحث عن مفتاح يكون اسمه "doc." ...... واذا لم يجد هذا المفتاح فانه مباشرة يعرض مربع الحوار (فتح بواسطة) .... اما اذا وجد المفتاح فانه ينظر في القيمة التي داخله واذا كان برنامج الورد الذي تستخدمه هو من النوع xp كما في حالتي انا فسوف يجد ان قميته هي "Word.Document.8" والتي تعني ان بيانات الملف الذي يفتح هذا النوع من الملفات doc موجودة في المفتاح Word.Document.8 فيقوم نظام التشغيل بالبحث عن هذا المفتاح كي يتعرف على البرنامج الذي يجب ان يشغله لفتح هذا النوع من الملفات وعندما يجده يبدء بقرائة البيانات من داخله واليك بعض التفصيل فيما يجب ان يحتويه هذا المفتاح .... ان افضل طريقة لفهم ما يتم شرحه هنا ان تقوم بفتح الريجيستري وتتبع الخطوات التي اوضحها هنا فمثلاً ابحث عن المفتاح .doc وسوف تجد بمجرد ان تختارة انه يعرض لك في القئمة اليمنى من الريجيستري اسم المفتاح الذي يجب ان تبحث فيه وهو في مثالنا Word.Document.8 ثم قم بالنقر على هذا المفتاح ماذا ستجد ؟ ... سوف تجد مباشرة في يمين الشاشة في القيمة المسماه (Defalut) او القيمة الافتراضية عبارة كهذة "مستند Microsoft Word" وهذة العبارة هي التي تظهر عندما تقوم بالنقر على اي ملف ثم اختيار خصائص فانه سوف يتم عرض نوع الملف وبجواره هذا التعليق والذي يفيد بان نوع هذا الملف هو ملف ورد وكذلك الحال بالنسبة لاي نوع آخر من الملفات كملفات الرسام تجد ان نوعها يوجد به تعليق مثل "صورة نقطية" وبهذا نكون قد عرفنا اين يمكن وضع تعليق على نوع ملفاتك الجديد ويمكنك جعلها مثلاً "برنامج فلان للتحرير النصوص" .... طبعاً هذا فقط عبارة نوع الملف ولكن يوجد الكثير داخل المفتاح Word.Document.8 قم الان بالنقر على علامة الجمع الموجودة بجواره لتمديده ورؤية المفاتيح التي بداخله سوف تجد مفاتيح عدة والتي تهمنا منها اتنان هما المفتاح Default Icon و المفتاح Shell ... المفتاح Default Icon : يحتوي على مسار الملف الذي يملك ايقونة برنامجك بحيث تصبح مفاتك لها ايقونة خاصة وهذا مهم جداً فمثلاً ترى ان ملفات الصوت لها يونة خاصة بينما ملفات قواعد بيانات الاكسس لها ايقونة مميزة لها وبذى يسهل تمييز الملفات من ايقوناتها مباشرة ... وملف الايقونة يمكن ان يكون احد ثلاثة انواع اما ملف Ico عادي وتجد الكثير منها مع برنامج الفيجوال في المجلد Graphics ثم Icons .... ويمكن ان تكون ملف DLL حيث ان هذة الملفات يمكن ان تحتوي على اكثر من ايقونة واحدة ويتم تحديد الايقونة التي نريدها عن طريق الرقم مثلاً : Code: C:\Windows\System32\Shell32.dll,3 واما الطريقة الثالثة للتحديد ايقونة وهي التي سوف نستخدمها هنا هي مسار ملفك التنفيدي فاذا كان برنامجك هو Test.exe فان القيمة سوف تكون عنوان ملفك التنفيدي والايقونة التي سوف تظهر هي الايقونة الاولى في ملف المصادر Resoures داخل برنامجك او ايقونة الفورم الاولى في البرنامج ..... هذا كان لتحديد ايقونة لمفاتك اما الان سوف نستعرض محتويات المفتاح Shell وهي الاهم .. نلاحظ جميعاً اننا اذا نقرنا على اي ملف بالزر الايمن فان تظهر قائمة تحتوي على اوامر ثابثة في كل الملفات وهي في الجزء الاسفل كالامر حذف و اعادة تسمية وخصائص و ... و .... و .... بينما القسم الاعلى نجد فيه اوامر تختلف من ملف الى آخر مثلاً نجد في ملفات الرسام الامر فتح و عرض وطباعة بينما نجد في ملفات الصوت wav امر جديد مثل تسجيل و تشغيل وهناك اشياء ثابتة ايضاً .... وكل ذلك موجود في القسم shell حيث انك اذا فتحته تجد مفاتيح اخرى مثل : open وقميتة "فتح" Print وقيمته "طباعة" وغيرها اي ان الاسم Open هو اسمة في الريجيستري اما الاسم فتح فهو الذي سوف يظهر في القائمة اليمنى يعني كتجربة بسيطة غير الكلمة فتح الى العبارة "سبحان الذي هدانا لهذا" ثم اذهب الى اي ملف ورد في جهازك وانقر بالزر الايمن وسوف ترى ان الامر فتح اختفى واصبح مكانه العبارة التي كتبناها واذا نقرت عليها يتم فتح الورد كما كان الامر سابقاً اي ان الذي غيرناه هو الاسم فقط وانما العمل ظل كما كان سابقاً ... (قم الان باعادة الوضع كما كان سابقاً واعيد الكلمة فتح) ... لاحظ الان ان داخل كل مفتاح من المفاتيح المحتواه داخل Shell يوجد بها مفتاح باسم Command اي انه داخل المفتاح Open يوجد مفتاح command وكذلك الحال داخل المفتاح Print يوجد ايضا command ووظيفة هذا المفتاح ان يحتوي على القيمة التي تدل على البرنامج الذي نريد تشغيله اي انه ماذا نريد ان يحصل اذا نقرنا على الامر فتح .... مباشرة يتم تشغيل البرنامج الموجود داخل الـ Command التابع للمفتاح Open .... واذا نظرنا في قمية الكوماند التابع للفتاح open في مثالنا (برنامج الورد) فاننا سوف نجد فيه مسار برنامج الورد متبوعاً بالعلامة %1 وهي علامة مهمة جداً واذا حذفتها فان الملف لن يعمل .... طبعاً كل ماسبق هو لمعرفة اين يتم التخزين واذا وجدت اي صعوبة في شرح الامر يمكنك الاعماد على الريجستري وتجربة النتائج التي تحصل وانصح بالتجربة على ملفات txt واذا حصل اي خطأ ولم تتمكن بعده من فتح الملفات النصية بالشكل السليم عندها قم بالضغط على الزر shift اثناء الضغط على الزر الايمن للماوس فوق احد الملفات النصية وسوف تظهر لك القائمة المعهودة ولكن باضافة الامر فتح بواسطة اخترة ثم اختار بنامج المفكرة notepad وحدد الخيار الذي يجعل المفكرة هي التي تفتح الملفات النصية txt دائماً .... واكرر انك اذا لم تكن واثقاً مما تفعل انصح بتجاهل الجزء السابق لاننا سوف نقوم بكل ماسبق برمجياً دون الحاجة الى فتح الريجستري وقد كان ذلك للفائدة فقط ... الان سوف نتعرف على الاجراء الذي سوف يقوم بتسجيل نوع الملفات الجديد في النظام ... والامر الذي سوف نتسخدمه هو NewFileType وهذا الامر يحتوي على ثلاثة بارميترات فقط وهي كالتالي : Code: ProgramPath اسم برنامجك ومساره Extension الامتداد Description وصف النوع الجديد والشفرة اختصاراً ستكون كالتالي : Code: Sub NewFileType(ProgramPath As String, ByVal Extension As String, Description As String)
Dim W As Object
Dim E As String
Set W = CreateObject("Wscript.shell")
If Left(Extension, 1) <> "." Then
E = "." & Extension & "\"
Else
E = Extension & "\"
Extension = Mid(Extension, 2)
End If
W.regwrite "HKCR\" & E, Extension & " File"
W.regwrite "HKCR\" & Extension & " File\", Description
W.regwrite "HKCR\" & Extension & " File\Default Icon\", ProgramPath
W.regwrite "HKCR\" & Extension & " File\Shell\Open\Command\", ProgramPath & " %1"
W.regwrite "HKCR\" & Extension & " File\Shell\", "Open"
End SubCode: NewFileType "C:\data\Test.exe" , "rgd" , "Rgheed Special Files" طبعاً هذا جميل جداً ويمكنك ان تضعه في الحدث Load التابع للفورم بحيث يقوم بالتسجيل عند تشغيل الفورم ... لكن ما الذي تغير الان بعد الاضافة ؟؟؟ اذا قمت بانشاء ملف جديد وجعلت امتداده rgd فسوف تلاحظ ان الملف اصبح يحمل ايقونة برنامجك وانك اذا نقرت عليه مزدوجاً سوف تجد ان برنامجك قد عمل مباشرة ولكن البرنامج يعمل بالشكل الاعتيادي فما الفرق اذا عندما انقر على البرنامج الاصلي او على احد الملفات التابعة له ؟؟؟ في الواقع انه في البرامج الاخرى تجد انك اذا نقرت على اختصار البرنامج الموجود في القائمة ابدء يعمل البرنامج ( مثلاً المفكرة ) ولكنها تكون خالية اي لا تحتوي على ملف مفتوح بينما عندما ننقر على ملف من النوع txt فان المفكرة تعمل مباشرة لكن مع فرق بسيط هو انها ليست خالية بل ان الملف الذي نقرت عليه قد تم عرض محتوياته داخلها ... اذاّ كيف عرفت المفكرة اننا نقرنا على ملف معبن ثم قامت بعرضه بينما عندما نقرنا على البرنامج فقط بدون ملف txt تم فتح المفكرة ولكنها لم تعرض شيئاً ؟؟ ... الذي يحدث هو ان الفيجوال يحتوي على امر معرف فيه هو command وهذا الامر اذا نقرنا على البرنامج مباشرة تكون قيمته "" بينما اذا نقرنا على ملف تابع لبرنامجنا مثل الملف rgd في مثالنا السابق فان هذا الامر تكون قيمته هي اسم الملف المنقور عليه ... فاذا كنا نريد ان نضع محتويات الملف الذي ننقر عليه داخل مربع نص نقوم بالتالي : Code: Private Sub Form_Load()
Dim F As Integer
Dim S As String
NewFileType "C:\data\Test.exe", "rgd", "Rgheed Special Files"
If Command <> "" Then
F = FreeFile
Open Command For Binary As F
S = spcae(LOF(F))
Get #F, 1, S
Close F
Text1.Text = S
End If
End Subان المفاهيم السابقة مهمة جداً لنا كمبرمجين حيث انه يجب علينا ان نتعامل مع الملفات بشكل اكثر احترافية ... كما اني اود ان انوه الى ان وظائف الامر Command ليس فقط عرض اسم الملف الذي تم النقر عليه وانما تمرير توابع الى داخل برنامجنا بحيث يقوم البرنامج بالتصرف بحسب العامل الذي مرر اليه بواسطة الامر Command ونحن هنا كان التابع المرر الى برنامجنا هو اسم الملف الذي تم النقر عليه لذى فان برنامجنا الان يقوم باحد سلوكين اعتماداً على قيمة Command ... السلوك الاول هو ان يعمل بشكل اعتيادي في حالة ان الامر Command كان خالياً ... والسلوك الآخر هو عرض محتويات الملف اذا كان الامر Command غير خالي (اي انه يحتوي على اسم الملف) .... ويمكن بالطبع جعل التابع Command يمرر قيم اخرى تتحكم في سلوك برنامجنا وبالتالي يجب على البرنامج ان يقوم بالفحص اعتماداً على قيمة Command ثم تقرير العمل او السلوك المطلوب من البرنامج بعدها .... اتمنى ان تصل اليكم الفكرة ..... اخوكم رغيد .... __________________
--------------------------------- آخر البرامج ------------------------------------------- تشغيل مشاريع الـ 2003 بواسطة الإصدارة 2002 من بيئة التطوير -------------------- سلسة أفكار و تلميحات برمجية بسيطة -------------------------- 1 - أفكار و تلميحات برمجية [ تغيير النص في زر ابدء ! ] 2 - أفكار و تلميحات برمجية [ المعنى الحقيقي للـ False & Ture ] -------------------------- مواضيع السلسة الذهبية ----------------------------------- السلسلة الذهبية في المواضيع العلمية [ تقنية الإستدعاء الذاتي Recursion ] السلسلة الذهبية في المواضيع العلمية [ كيف نحل مشاكلنا بأنفسنا ؟ ] السلسلة الذهبية في المواضيع العلمية [ المعاملات المنطقية فائدتها واستخداماتها ] ------------------------------ مناقشات برمجية ---------------------------------------- حول إعادة تشغيل الوينذوز ## كيف نعرف اللغة المستخدمة حالياً ؟؟ فتح الملف الذي نقر المستخدم عليه ببرنامج مفتوح مسبقاً ## إنشاء إمتداد خاص ببرنامجك كيف تفتح ملفات الـ PDF داخل برنامجك ! ------------------------- برامج الـ Visual Basic .NET ---------------------------------- شاشة التوقف في الدوت نت .. افكار وتلميحات ! ## مصفوفات الأدوات في الدوت نت !؟ تلميحات : لتحسين الأداء الرسومي ! ## تسهيل البحث عن مايقابل دوال الـ API في الدوت نت ! خط يتبع الفأرة ## برنامج الـ RUN التابع للويندوز ------------------------- برامج الـ Visual Baisc 6.0 ------------------------------------ برنامج لتكوين وتخزين اللوانك المفضلة ## برنامج لمراقبة اداء ذاكرة الكمبيوتر و القرص الصلب ## برنامج لإضافة شعارك لخصائص النظام عيون تنظر الى الماوس ## تعديل وتحسين قائمة ابدء ## حفظ الصور بصيغة JPG صور متحركة على سطح المكتب ## قراءة الارقام بالصوت! ## التحكم في الألوان الصور حل لعبة أبراج هانوي ## الربط بين الاجهزة ## إصنع شاشة توقف بنفسك! ساعة الحائط ## تقسيم الملفات الكبيرة ## تنبيه إذا نسيت احد الاقراص رسم وتدوير الكائنات الثلاثية الابعاد ---------------------------- ادوات ActiveX شخصية -------------------------------------- الإصدار الثاني من الأزرار المطورة ( جديد !) ## شريط عمليات - بمظاهر اكثر جاذبية مربع قائمة متعدد الالوان ## عرض المجلدات بطريقة الوينذوز ## تثبيت الادوات داخل الفورم ازرار الوينذوز XP ## عرض الصور بطريقة مميزة ## اداة ProgressBar المعدلة -------------------------------- مجموعة اللعاب ------------------------------------------ لعبة الهروب الكبير ## كرة متحركة ## سباق السيارات |
|
#2
| |||
| |||
|
جزاك الله 1000 خير أخي رغيد الطيب
![]() |
|
#3
| |||
| |||
|
السلام عليكم ورحمة الله وبركاته
جزيت خيراً يا استاذنا رغيد لم أقرأ الدرس كاملا حتى الآن ، ولكن أول ما رأيت أنك كتبت موضوع جديد علمت أنه سيكون ممتع و مفيد . جزاك الله خيراَ . والسلام عليكم ورحمة الله وبركاته أبو عابد |
|
#4
| |||
| |||
|
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته ما شاء الله ... الحمد لله على السلامة ... أتمنى لك التوفيق حسام __________________
وكفى بالموت واعظاً .. اللهم ارحمنا لعن الله أمريكا ومن والاها |
|
#5
| |||
| |||
|
شكراً
![]() تحياتي ![]() |
|
#6
| |||
| |||
|
مشكووووووووووووووووور جدا جدا جدا جدا أستاذ رغيد على هذا الموضوع
...
![]() |
|
#7
| |||
| |||
|
جربة الشرح ولاكن للأسف إذا عملت حفظ للملف ( محتويات مربع النص )
بالإمتداد rgd تظهر لي رسالة Err Mode ويحفظ الملف ويغلق البرنامج ويصبح
الوصف للملف مثل الذي كتبته ولاكن لا يأخذ أيقونة برنامجي ؟ وأيضاً بعد وضع
الكود لفتح الملف مباشرة ما يطلع شي يعني فقط يفتح البرنامج ؟
تحياتي ![]() |
|
#8
| |||
| |||
|
أخي العزيز رغيد:
درسك الآن كما عودتنا دائماً ....... مفيد وجميل............ ولكن لي بعض الأستفسارات التي لم أفهمها......... أولاً أنا فتحت الريجستري على المسار التالي ......... HKey_Classes_Root\.doc\........ فوجدت العبارة التالية في Default ........ Word.Document.8...... وعندما فتحت هذا المفتاح لم أجد سوى المفتاح الفرعي.........ShellNow ولم أجد أي شيئ مما ذكرت في درسك علماً بأن نظامي هو ME...... ثانياً ...... في الكود الذي كتبته في الإجراء NewFileType ........ Code: W.RegWrite "HKCR\" & E, Extension & " File" W.RegWrite "HKCR\" & Extension & " File\", Description W.RegWrite "HKCR\" & Extension & " File\Default Icon\", ProgramPath W.RegWrite "HKCR\" & Extension & " File\Shell\Open\Command\", ProgramPath & " %1" W.RegWrite "HKCR\" & Extension & " File\Shell\", "Open" أعتقد أن به خطا لأن إذا جئنا لنقرأه على المتحول Rgd مثلاً سنجد ....... في السطر الأول سننشئ مفتاحاً فرعياً اسمه .rgd في السطر الثاني سننشئ مفتاحاً فرعياً على المسار التالي HKCR\Rgd File\ ونضع فيه قيمة الوصف ......... بينما الذي نريده نحن كما فهمت من درسك ....... HKCR\.rgd\Rgd File\ ................ وهكذ في بقية السطور نستمر في الإنشاء على المفتاح السابق الخاطئ........... أرجو منك تصويبي إن كنت خاطئ ........... مع شكري الجزيل لدروسك القيمة........... تحياتي لك ........... أوس آخر تعديل بواسطة أوس ، 13-09-2002 الساعة 08:05 AM. |
|
#10
| |||
| |||
|
السلام عليكم
الآن أكملت الدرس و قمت بالتجربة و كانت فعلاً ناجحة 100% أشكرك أخي رغيد من كل قلبي على هذا الجهد المبذول في سبيل نشر العلم و المعرفة ، جعله الله في ميزان حسناتك يوم تلقاه و لا أنسى أن قول لك : إني أحبك في الله أما سؤال أخى العزيز / أوس فأقول يا أخي الكريم ، عندما تجد doc. ستجد فيه العبارة التالية Default أمامها القيمة Word.Document.8 حسناً إبحث من جديد عن مفتاح داخل الرجيستري (مجلد) اسمه Word.Document.8 ستجده تحت المفتاح الرئيسي HKEY_CLASSES_ROOT إفتح هذا المجلد ستجد فيه مجموعة من المجلدات (المفاتيح) من بينها Shell و DefaultIcon أرجو أن أكون قد أوضحت الغموض . والسلام عليكم ورحمة الله وبركاته أبو عابد |
![]() |
|
|